Vytvoreni nove tridy - zacatecnicky dotaz

Otázka od: 3dimension

28. 12. 2002 15:48

Dobry den,
s delphi zacinam a tak sem si chtel vytvorit vlastni tridu.
Deklarace je tady:

  TMyClass = class (TObject)
  private
    FX: Integer;
    procedure SetX(const Value: Integer);
  public
    property X : Integer read FX write SetX;
  end;
...

...
procedure TMyClass.SetX(const Value: Integer);
begin
  FX := Value;
end;

Pokud ale udelam tlacitko a provedu tohle:

procedure TForm1.Button1Click(Sender: TObject);
var
  M : TMyClass;
begin
  M.Create;

  M.Free;
end;

talcitko zmizi.

Pokud promenou me tridy vytvarim v:

procedure TForm1.FormCreate(Sender: TObject);
begin
  P.Create;
end;

tak se objevi nasleduji chyba:
"Project Project1.exe raised exception class
EAccessViolation with message 'Access violation at address 00402F85 in
module 'PROJECT1.EXE'. Read of address FFFFFFFF'. Process stopped. Use Step
or Run to continue."

Mohl byste mi nekdo poradit kde delam chybu ?

Predem dekuji.

Odpovedá: MarekFi

28. 12. 2002 17:11



3dimension wrote:

> Dobry den,
> s delphi zacinam a tak sem si chtel vytvorit vlastni tridu.
> Deklarace je tady:
>
> TMyClass = class (TObject)
> private
> FX: Integer;
> procedure SetX(const Value: Integer);
> public
> property X : Integer read FX write SetX;
> end;
> ...
>
> ...
> procedure TMyClass.SetX(const Value: Integer);
> begin
> FX := Value;
> end;
>
> Pokud ale udelam tlacitko a provedu tohle:
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> M : TMyClass;
> begin
> M.Create;

to je chyba, tady musi byt:
M := TMyClass.Create;

> M.Free;
> end;
>
> talcitko zmizi.

>
>
> Pokud promenou me tridy vytvarim v:
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> P.Create;
> end;

To bude asi stejna chyba, ale nenapsal jsi jak je P deklarovane.

         Marek

Odpovedá: Vaclav Riha - Soft Consult

28. 12. 2002 17:11

Bezna chyba. Obcas se stane kazdymu. Kdyz uz se stane, tak se tezko hleda
(projevuje se jinde, nez vlastne vznikla).

var
  M : TMyClass;
begin
  M.Create; //spatne
  M:=TMyClass.Create; //spravne


S pozdravem Vaclav Riha


Dobry den,
s delphi zacinam a tak sem si chtel vytvorit vlastni tridu.
Deklarace je tady:

  TMyClass = class (TObject)
  private
    FX: Integer;
    procedure SetX(const Value: Integer);
  public
    property X : Integer read FX write SetX;
  end;
...

...
procedure TMyClass.SetX(const Value: Integer);
begin
  FX := Value;
end;

Pokud ale udelam tlacitko a provedu tohle:

procedure TForm1.Button1Click(Sender: TObject);
var
  M : TMyClass;
begin
  M.Create;

  M.Free;
end;

talcitko zmizi.

Pokud promenou me tridy vytvarim v:

procedure TForm1.FormCreate(Sender: TObject);
begin
  P.Create;
end;

tak se objevi nasleduji chyba:
"Project Project1.exe raised exception class
EAccessViolation with message 'Access violation at address 00402F85 in
module 'PROJECT1.EXE'. Read of address FFFFFFFF'. Process stopped. Use Step
or Run to continue."

Mohl byste mi nekdo poradit kde delam chybu ?

Predem dekuji.